extends Resource
class_name FileHelper
# 这个类也不能写

# 保存json数据
# path 文件路径
# data 数据字典
static func save(path, data):
	var file = File.new()
	file.open(path, File.WRITE)
	file.store_string(to_json(data))
	file.close()


# 读取json数据
# path 文件路径
static func read(path):
	var file = File.new()
	var res = file.open(path,File.READ)
	if res == OK:
		var content:String = file.get_as_text()
		file.close()
		return str2var(content)
	return null

func read_csv(path,dic_key):
	var file = File.new()
	file.open(path, File.READ)
	var a = file_exits(path)
	# 没有数据则返回空字典
	# 以 ; 分号进行分隔，具体需要自己打开 csv 文件查看是那种字符进行分隔的
	var temp = file.get_csv_line()
	if temp.size() <= 1:
		return {}

	# 第一行做为 key
	var keys = []
	for i in temp:
		keys.push_back(i)

	# 读取一行，但不对数据进行操作（这样等于是跳过了这一行）
	# 如果第二行就是要读取的数据，那么就不必加这一行代码
	file.get_csv_line()

	# 获取数据记录到字典中，字典可以方便的获取每个数据
	# 比如我们以数据的名字那一列作为 key 值
	# 那么我们只用通过 名字 来获取那一行数据
	var data_list = {}
	var err_count = 0	# 数据错误次数
	temp = file.get_csv_line()
	while temp.size() > 1:
		# 数据列数和 key 数量不一致，则跳过
		if temp.size() != keys.size():
			err_count += 1
			if err_count > 10:	# 错误超过 10 次，则不再读取
				break
			temp = file.get_csv_line(";")
			print_debug("数据有误，与第一行不一致 n: %d, k: %d" % [temp.size(), keys.size()])
			continue

		# 每行数据保存到字典中
		var data = {}
		for idx in range(temp.size()):
			data[keys[idx]] = temp[idx]
		data_list[data[dic_key]] = data

		# 读取下一行数据
		temp = file.get_csv_line()

	file.close()
	return data_list


# 保存加密的key
static func save_encrypted(path, data:Dictionary,key):
	var file = File.new()
	if file.open_encrypted_with_pass(path,File.WRITE,key) != OK:
		return
	var d = to_json(data)
	file.store_string(d)
	file.close()

# 读取加密key
static func read_encrypted(path, key):
	var file = File.new()
	if file.open_encrypted_with_pass(path,File.READ,key)!= OK:
		return {}
	var content:String = file.get_as_text()
	file.close()
	var var_ = str2var(content)
	return var_
# 读取csv文件

func read_csv_encrypted(path,key):
	pass

# 判断文件是否存在
static func file_exits(file):
	var fp:File = File.new()
	var e = fp.file_exists(file)
	fp.close()
	return e


# 判断资源文件是否存在
static func file_resource_exits(path):
	return ResourceLoader.exists(path)
	pass
	
static func delete_file(path):
	var d = Directory.new()
	d.remove(path)


